package com.lxyk.controller;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.lxyk.pojo.Customer;
import com.lxyk.service.CustomerService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

@Controller
@RequestMapping("/cust")
@Slf4j
public class CustomerController {
    @Autowired
    private CustomerService customerService;

    /*
    *用户点击“客户管理”超链接按钮，显示所有客户信息
    * 步骤：
    * 1.调用CustomerService对象的listCustomer方法查询所有客户信息
    * 2.将客户信息渲染到客户列表页面
    * 3.跳转到客户列表页面
    * @param model 在前端和后端之间传递数据对象
    * @return 客户列表页面
    * */
    @RequestMapping("/listCust")
    public String listCust(@RequestParam(required = false,defaultValue = "1",value = "pageNum")Integer pageNum,
                           @RequestParam(defaultValue = "10",value = "pageSize")Integer pageSize ,Model model,Customer customer){

        if(pageNum <=0 || pageNum.equals("") ||pageNum == null){
            pageNum = 1;
        }
        if(pageSize <= 0 || pageNum.equals("") || pageSize == null){
            pageSize = 10;
        }

        PageHelper.startPage(pageNum,pageSize);
        PageInfo<Customer> pageInfo = customerService.listCust(customer, pageNum, pageSize);
        model.addAttribute("pageInfo",pageInfo);
        model.addAttribute("custName",customer.getCustName());
        model.addAttribute("custMobile",customer.getCustMobile());
        return "customerList";
    }
    /*
    * 点击“添加”按钮跳转到“添加客户”页面
    * @return"添加客户"页面
    *
    * */
    @RequestMapping("/preSaveCust")
    public String preSaveCust(){
        return "customerSave";
    }
    /*
    * 添加客户信息，将表单输入的客户信息持久化到数据库中，添加成功返回客户列表页面
    * @param customer
    * @return
    * */
    @RequestMapping(value = "/saveCust",method = RequestMethod.POST)
    public String saveCust(Customer customer){
        log.info("Customer = "+customer);
        int rows = customerService.saveCustomer(customer);
        log.info("save customer row = "+rows);
        //重定向到客户列表，将新添加的客户信息显示出来
        return "redirect:/cust/listCust";
    }
    /*
    * 在浏览器上输入要搜索的“客户名称”，根据条件搜索满足条件的客户，将客户列表显示到前端页面
    * 步骤：
    * 1 调用CustomerService对象searchCustomer方法
    * 2 将客户列表渲染到前端
    * 3 跳转到客户列表页面
    * @param custName 客户名称
    * @param model
    * return 客户列表页面
    *
    * */

    @RequestMapping("/searchCust")
    public String searchCustomer(String custName,String custMoile,Model model){
        log.info("searchCustomer custName = "+custName);
        List<Customer> custList = customerService.searchCustomer(custName,custMoile);
        model.addAttribute("pageInfo",custList);
        //把搜索条件回传到前端页面
        model.addAttribute("searchName",custName);
        model.addAttribute("custMoile",custMoile);
        return "customerList";
    }
    /*
    * 处理删除请求
    * 步骤：
    * 1.调用CustomerService对象的deleteCustomerById方法根据ID删除客户信息
    * 2.打印受影响的行数
    * 3.返回客户列表路劲，重新执行查询客户列表方法listCustomer，显示删除之后的数据
    * @param cid 前端传入的客户id
    * @return 返回客户列表路劲，重新执行客户列表方法listCustomer，显示删除之后的数据
    *
    * */
    @RequestMapping("/delCust/{cid}")
    public String deleteCustomer(@PathVariable("cid") Integer cid){
        log.info("delete Customer cid = "+cid);
        int rows = customerService.deleteCustomerById(cid);
        log.info("delete custpmer  rows = "+rows);
        //查询已删除的客户列表信息
        return "redirect:/cust/listCust";
    }
    /*
    * 用户在页面上点击“修改”按钮，完成数据回显
    * 步骤：
    * 1 根据ID查询对应客户信息
    * 2 将客户信息渲染到“修改客户”页面
    * 3 返回“修改客户”页面
    * @param cid 客户id
    * @param model
    * @return 修改客户
    * */
    @RequestMapping("/preUpdateCust/{cid}")
    public String preUpdateCustomer(@PathVariable("cid") Integer cid,Model model){
        log.info("pre update customer cid = "+cid);
        Customer customer = customerService.getCustomerById(cid);
        model.addAttribute("customer",customer);
        //水票数量渲染到前端
        return "customerUpdate";
    }
    /*
    * 在“修改客户”页面点击“提交”按钮，处理“修改客户”的请求
    * 修改成功重新执行查询客户列表，回显修改之后的客户信息
    * @param customer“修改客户”页面采集客户信息
    * @return 客户列表
    * */
    @RequestMapping("/updateCust")
    public String updateCustomer(Customer customer){
        log.info("update Customer"+customer);
        int rows = customerService.updateCustomer(customer);
        log.info("update customer rows = "+rows);
        //修改成功查询客户列表，跳转到客户页面
        return "redirect:/cust/listCust";
    }
    @RequestMapping("/hi")
    public String hi(){
        return "customerList";
    }


}
